Autogenerated HTML docs for v2.16.2-345-g7e3123
diff --git a/RelNotes/2.17.0.txt b/RelNotes/2.17.0.txt index 1fe7b61..ae7c708 100644 --- a/RelNotes/2.17.0.txt +++ b/RelNotes/2.17.0.txt
@@ -8,13 +8,28 @@ * "diff" family of commands learned "--find-object=<object-id>" option to limit the findings to changes that involve the named object. - (merge 4d8c51aa19 sb/diff-blobfind-pickaxe later to maint). + + * "git format-patch" learned to give 72-cols to diffstat, which is + consistent with other line length limits the subcommand uses for + its output meant for e-mails. + + * The log from "git daemon" can be redirected with a new option; one + relevant use case is to send the log to standard error (instead of + syslog) when running it from inetd. + + * "git rebase" learned to take "--allow-empty-message" option. + + * "git am" has learned the "--quit" option, in addition to the + existing "--abort" option; having the pair mirrors a few other + commands like "rebase" and "cherry-pick". + + * "git worktree add" learned to run the post-checkout hook, just like + "git clone" runs it upon the initial checkout. Performance, Internal Implementation, Development Support etc. * More perf tests for threaded grep - (merge 7b31b55db1 ab/perf-grep-threads later to maint). * "perf" test output can be sent to codespeed server. (merge 19cf57a92e cc/codespeed later to maint). @@ -70,6 +85,10 @@ * More tests for wildmatch functions. + * The code to binary search starting from a fan-out table (which is + how the packfile is indexed with object names) has been refactored + into a reusable helper. + Also contains various documentation updates and code clean-ups. @@ -78,44 +97,35 @@ * An old regression in "git describe --all $annotated_tag^0" has been fixed. - (merge 1bba00130a dk/describe-all-output-fix later to maint). * "git status" after moving a path in the working tree (hence making it appear "removed") and then adding with the -N option (hence making that appear "added") detected it as a rename, but did not report the old and new pathnames correctly. - (merge 176ea74793 nd/ita-wt-renames-in-status later to maint). * "git svn dcommit" did not take into account the fact that a svn+ssh:// URL with a username@ (typically used for pushing) refers to the same SVN repository without the username@ and failed when svn.pushmergeinfo option is set. - (merge 8aaed892fd jm/svn-pushmergeinfo-fix later to maint). * API clean-up around revision traversal. - (merge 6fcec2f9ae rs/lose-leak-pending later to maint). * "git merge -Xours/-Xtheirs" learned to use our/their version when resolving a conflicting updates to a symbolic link. - (merge fd48b46474 jc/merge-symlink-ours-theirs later to maint). * "git clone $there $here" is allowed even when here directory exists as long as it is an empty directory, but the command incorrectly removed it upon a failure of the operation. - (merge d45420c1c8 jk/abort-clone-with-existing-dest later to maint). * "git commit --fixup" did not allow "-m<message>" option to be used at the same time; allow it to annotate resulting commit with more text. - (merge 30884c9afc ab/commit-m-with-fixup later to maint). * When resetting the working tree files recursively, the working tree of submodules are now also reset to match. - (merge 7dcc1f4df8 sb/submodule-update-reset-fix later to maint). * "git stash -- <pathspec>" incorrectly blew away untracked files in the directory that matched the pathspec, which has been corrected. - (merge bba067d2fa tg/stash-with-pathspec-fix later to maint). * Instead of maintaining home-grown email address parsing code, ship a copy of reasonably recent Mail::Address to be used as a fallback @@ -125,7 +135,6 @@ * "git add -p" was taught to ignore local changes to submodules as they do not interfere with the partial addition of regular changes anyway. - (merge 12434efc1d nd/add-i-ignore-submodules later to maint). * Avoid showing a warning message in the middle of a line of "git diff" output. @@ -166,11 +175,62 @@ title is spread across physically multiple lines. (merge 1cf823fb68 tg/reset-hard-show-head-with-pretty later to maint). + * Test fixes. + (merge 63b1a175ee sg/test-i18ngrep later to maint). + + * Some bugs around "untracked cache" feature have been fixed. This + will notice corrupt data in the untracked cache left by old and + buggy code and issue a warning---the index can be fixed by clearing + the untracked cache from it. + (merge 0cacebf099 nd/fix-untracked-cache-invalidation later to maint). + (merge 7bf0be7501 ab/untracked-cache-invalidation-docs later to maint). + + * "git blame HEAD COPYING" in a bare repository failed to run, while + "git blame HEAD -- COPYING" run just fine. This has been corrected. + + * "git add" files in the same directory, but spelling the directory + path in different cases on case insensitive filesystem, corrupted + the name hash data structure and led to unexpected results. This + has been corrected. + (merge c95525e90d bp/name-hash-dirname-fix later to maint). + + * "git rebase -p" mangled log messages of a merge commit, which is + now fixed. + (merge ed5144d7eb js/fix-merge-arg-quoting-in-rebase-p later to maint). + + * Some low level protocol codepath could crash when they get an + unexpected flush packet, which is now fixed. + (merge bb1356dc64 js/packet-read-line-check-null later to maint). + + * "git check-ignore" with multiple paths got confused when one is a + file and the other is a directory, which has been fixed. + (merge d60771e930 rs/check-ignore-multi later to maint). + + * "git describe $garbage" stopped giving any errors when the garbage + happens to be a string with 40 hexadecimal letters. + (merge a8e7a2bf0f sb/describe-blob later to maint). + + * Code to unquote single-quoted string (used in the parser for + configuration files, etc.) did not diagnose bogus input correctly + and produced bogus results instead. + (merge ddbbf8eb25 jk/sq-dequote-on-bogus-input later to maint). + + * Many places in "git apply" knew that "/dev/null" that signals + "there is no such file on this side of the diff" can be followed by + whitespace and garbage when parsing a patch, except for one, which + made an otherwise valid patch (e.g. ones from subversion) rejected. + (merge e454ad4bec tk/apply-dev-null-verify-name-fix later to maint). + + * We no longer create any *.spec file, so "make clean" should not + remove it. + (merge 4321bdcabb tz/do-not-clean-spec-file later to maint). + + * "git push" over http transport did not unquote the push-options + correctly. + (merge 90dce21eb0 jk/push-options-via-transport-fix later to maint). + * Other minor doc, test and build updates and code cleanups. (merge e2a5a028c7 bw/oidmap-autoinit later to maint). - (merge f0a6068a9f ys/bisect-object-id-missing-conversion-fix later to maint). - (merge 30221a3389 as/read-tree-prefix-doc-fix later to maint). - (merge 9bd2ce5432 ab/doc-cat-file-e-still-shows-errors later to maint). (merge ec3b4b06f8 cl/t9001-cleanup later to maint). (merge e1b3f3dd38 ks/submodule-doc-updates later to maint). (merge fbac558a9b rs/describe-unique-abbrev later to maint). @@ -185,3 +245,13 @@ (merge b780e4407d jc/worktree-add-short-help later to maint). (merge ae239fc8e5 rs/cocci-strbuf-addf-to-addstr later to maint). (merge 2e22a85e5c nd/ignore-glob-doc-update later to maint). + (merge 3738031581 jk/gettext-poison later to maint). + (merge 54360a1956 rj/sparse-updates later to maint). + (merge 12e31a6b12 sg/doc-test-must-fail-args later to maint). + (merge 760f1ad101 bc/doc-interpret-trailers-grammofix later to maint). + (merge 4ccf461f56 bp/fsmonitor later to maint). + (merge a6119f82b1 jk/test-hashmap-updates later to maint). + (merge 5aea9fe6cc rd/typofix later to maint). + (merge e4e5da2796 sb/status-doc-fix later to maint). + (merge 7976e901c8 gs/test-unset-xdg-cache-home later to maint). + (merge d023df1ee6 tg/worktree-create-tracking later to maint).
diff --git a/git-am.html b/git-am.html index bb43da5..eae0f01 100644 --- a/git-am.html +++ b/git-am.html
@@ -755,7 +755,7 @@ [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet] [--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>] [(<mbox> | <Maildir>)…] -<em>git am</em> (--continue | --skip | --abort)</pre> +<em>git am</em> (--continue | --skip | --abort | --quit)</pre> <div class="attribution"> </div></div> </div> @@ -1067,6 +1067,15 @@ Restore the original branch and abort the patching operation. </p> </dd> +<dt class="hdlist1"> +--quit +</dt> +<dd> +<p> + Abort the patching operation but keep HEAD and the index + untouched. +</p> +</dd> </dl></div> </div> </div> @@ -1160,7 +1169,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/git-am.txt b/git-am.txt index 12879e4..460662e 100644 --- a/git-am.txt +++ b/git-am.txt
@@ -16,7 +16,7 @@ [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet] [--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>] [(<mbox> | <Maildir>)...] -'git am' (--continue | --skip | --abort) +'git am' (--continue | --skip | --abort | --quit) DESCRIPTION ----------- @@ -167,6 +167,10 @@ --abort:: Restore the original branch and abort the patching operation. +--quit:: + Abort the patching operation but keep HEAD and the index + untouched. + DISCUSSION ----------
diff --git a/git-daemon.html b/git-daemon.html index 2267732..a6c9e24 100644 --- a/git-daemon.html +++ b/git-daemon.html
@@ -760,6 +760,7 @@ [--inetd | [--listen=<host_or_ipaddr>] [--port=<n>] [--user=<user> [--group=<group>]]] + [--log-destination=(stderr|syslog|none)] [<directory>…]</pre> <div class="attribution"> </div></div> @@ -852,7 +853,8 @@ </dt> <dd> <p> - Have the server run as an inetd service. Implies --syslog. + Have the server run as an inetd service. Implies --syslog (may be + overridden with <code>--log-destination=</code>). Incompatible with --detach, --port, --listen, --user and --group options. </p> @@ -912,11 +914,55 @@ </dt> <dd> <p> - Log to syslog instead of stderr. Note that this option does not imply - --verbose, thus by default only error conditions will be logged. + Short for <code>--log-destination=syslog</code>. </p> </dd> <dt class="hdlist1"> +--log-destination=<destination> +</dt> +<dd> +<p> + Send log messages to the specified destination. + Note that this option does not imply --verbose, + thus by default only error conditions will be logged. + The <destination> must be one of: +</p> +<div class="openblock"> +<div class="content"> +<div class="dlist"><dl> +<dt class="hdlist1"> +stderr +</dt> +<dd> +<p> + Write to standard error. + Note that if <code>--detach</code> is specified, + the process disconnects from the real standard error, + making this destination effectively equivalent to <code>none</code>. +</p> +</dd> +<dt class="hdlist1"> +syslog +</dt> +<dd> +<p> + Write to syslog, using the <code>git-daemon</code> identifier. +</p> +</dd> +<dt class="hdlist1"> +none +</dt> +<dd> +<p> + Disable all logging. +</p> +</dd> +</dl></div> +</div></div> +<div class="paragraph"><p>The default destination is <code>syslog</code> if <code>--inetd</code> or <code>--detach</code> is specified, +otherwise <code>stderr</code>.</p></div> +</dd> +<dt class="hdlist1"> --user-path </dt> <dt class="hdlist1"> @@ -1233,7 +1279,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/git-daemon.txt b/git-daemon.txt index 3c91db7..56d54a4 100644 --- a/git-daemon.txt +++ b/git-daemon.txt
@@ -20,6 +20,7 @@ [--inetd | [--listen=<host_or_ipaddr>] [--port=<n>] [--user=<user> [--group=<group>]]] + [--log-destination=(stderr|syslog|none)] [<directory>...] DESCRIPTION @@ -80,7 +81,8 @@ do not have the 'git-daemon-export-ok' file. --inetd:: - Have the server run as an inetd service. Implies --syslog. + Have the server run as an inetd service. Implies --syslog (may be + overridden with `--log-destination=`). Incompatible with --detach, --port, --listen, --user and --group options. @@ -110,8 +112,28 @@ zero for no limit. --syslog:: - Log to syslog instead of stderr. Note that this option does not imply - --verbose, thus by default only error conditions will be logged. + Short for `--log-destination=syslog`. + +--log-destination=<destination>:: + Send log messages to the specified destination. + Note that this option does not imply --verbose, + thus by default only error conditions will be logged. + The <destination> must be one of: ++ +-- +stderr:: + Write to standard error. + Note that if `--detach` is specified, + the process disconnects from the real standard error, + making this destination effectively equivalent to `none`. +syslog:: + Write to syslog, using the `git-daemon` identifier. +none:: + Disable all logging. +-- ++ +The default destination is `syslog` if `--inetd` or `--detach` is specified, +otherwise `stderr`. --user-path:: --user-path=<path>::
diff --git a/git-interpret-trailers.html b/git-interpret-trailers.html index 335f49b..2087b54 100644 --- a/git-interpret-trailers.html +++ b/git-interpret-trailers.html
@@ -788,7 +788,7 @@ with only spaces at the end of the commit message part, one blank line will be added before the new trailer.</p></div> <div class="paragraph"><p>Existing trailers are extracted from the input message by looking for -a group of one or more lines that (i) are all trailers, or (ii) contains at +a group of one or more lines that (i) is all trailers, or (ii) contains at least one Git-generated or user-configured trailer and consists of at least 25% trailers. The group must be preceded by one or more empty (or whitespace-only) lines. @@ -1240,7 +1240,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/git-interpret-trailers.txt b/git-interpret-trailers.txt index 9dd19a1..ff446f1 100644 --- a/git-interpret-trailers.txt +++ b/git-interpret-trailers.txt
@@ -51,7 +51,7 @@ will be added before the new trailer. Existing trailers are extracted from the input message by looking for -a group of one or more lines that (i) are all trailers, or (ii) contains at +a group of one or more lines that (i) is all trailers, or (ii) contains at least one Git-generated or user-configured trailer and consists of at least 25% trailers. The group must be preceded by one or more empty (or whitespace-only) lines.
diff --git a/git-rebase.html b/git-rebase.html index 42dbfa1..2dfafe7 100644 --- a/git-rebase.html +++ b/git-rebase.html
@@ -1090,6 +1090,16 @@ </p> </dd> <dt class="hdlist1"> +--allow-empty-message +</dt> +<dd> +<p> + By default, rebasing commits with an empty message will fail. + This option overrides that behavior, allowing commits with empty + messages to be rebased. +</p> +</dd> +<dt class="hdlist1"> --skip </dt> <dd> @@ -2086,7 +2096,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/git-rebase.txt b/git-rebase.txt index 8a861c1..d713951 100644 --- a/git-rebase.txt +++ b/git-rebase.txt
@@ -244,6 +244,11 @@ Keep the commits that do not change anything from its parents in the result. +--allow-empty-message:: + By default, rebasing commits with an empty message will fail. + This option overrides that behavior, allowing commits with empty + messages to be rebased. + --skip:: Restart the rebasing process by skipping the current patch.
diff --git a/git-status.html b/git-status.html index 0458614..1b25ad0 100644 --- a/git-status.html +++ b/git-status.html
@@ -1046,10 +1046,10 @@ <div class="content"> <pre><code>X Y Meaning ------------------------------------------------- - [MD] not updated + [AMD] not updated M [ MD] updated in index A [ MD] added to index -D [ M] deleted from index +D deleted from index R [ MD] renamed in index C [ MD] copied in index [MARC] index and work tree matches @@ -1288,7 +1288,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/git-status.txt b/git-status.txt index 72bfb87..f9c91c7 100644 --- a/git-status.txt +++ b/git-status.txt
@@ -184,10 +184,10 @@ X Y Meaning ------------------------------------------------- - [MD] not updated + [AMD] not updated M [ MD] updated in index A [ MD] added to index - D [ M] deleted from index + D deleted from index R [ MD] renamed in index C [ MD] copied in index [MARC] index and work tree matches
diff --git a/git-update-index.html b/git-update-index.html index 525d663..5c95c6f 100644 --- a/git-update-index.html +++ b/git-update-index.html
@@ -1402,6 +1402,28 @@ command reads the index; while when <code>--[no-|force-]untracked-cache</code> are used, the untracked cache is immediately added to or removed from the index.</p></div> +<div class="paragraph"><p>Before 2.17, the untracked cache had a bug where replacing a directory +with a symlink to another directory could cause it to incorrectly show +files tracked by git as untracked. See the "status: add a failing test +showing a core.untrackedCache bug" commit to git.git. A workaround for +that is (and this might work for other undiscovered bugs in the +future):</p></div> +<div class="listingblock"> +<div class="content"> +<pre><code>$ git -c core.untrackedCache=false status</code></pre> +</div></div> +<div class="paragraph"><p>This bug has also been shown to affect non-symlink cases of replacing +a directory with a file when it comes to the internal structures of +the untracked cache, but no case has been reported where this resulted in +wrong "git status" output.</p></div> +<div class="paragraph"><p>There are also cases where existing indexes written by git versions +before 2.17 will reference directories that don’t exist anymore, +potentially causing many "could not open directory" warnings to be +printed on "git status". These are new warnings for existing issues +that were previously silently discarded.</p></div> +<div class="paragraph"><p>As with the bug described above the solution is to one-off do a "git +status" run with <code>core.untrackedCache=false</code> to flush out the leftover +bad data.</p></div> </div> </div> <div class="sect1"> @@ -1421,8 +1443,8 @@ <a href="git-config.html">git-config(1)</a>) than using the <code>--fsmonitor</code> option to <code>git update-index</code> in each repository, especially if you want to do so across all repositories you use, because you can set the configuration -variable to <code>true</code> (or <code>false</code>) in your <code>$HOME/.gitconfig</code> just once -and have it affect all repositories you touch.</p></div> +variable in your <code>$HOME/.gitconfig</code> just once and have it affect all +repositories you touch.</p></div> <div class="paragraph"><p>When the <code>core.fsmonitor</code> configuration variable is changed, the file system monitor is added to or removed from the index the next time a command reads the index. When <code>--[no-]fsmonitor</code> are used, the file @@ -1473,7 +1495,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/git-update-index.txt b/git-update-index.txt index bdb0342..3897a59 100644 --- a/git-update-index.txt +++ b/git-update-index.txt
@@ -464,6 +464,32 @@ are used, the untracked cache is immediately added to or removed from the index. +Before 2.17, the untracked cache had a bug where replacing a directory +with a symlink to another directory could cause it to incorrectly show +files tracked by git as untracked. See the "status: add a failing test +showing a core.untrackedCache bug" commit to git.git. A workaround for +that is (and this might work for other undiscovered bugs in the +future): + +---------------- +$ git -c core.untrackedCache=false status +---------------- + +This bug has also been shown to affect non-symlink cases of replacing +a directory with a file when it comes to the internal structures of +the untracked cache, but no case has been reported where this resulted in +wrong "git status" output. + +There are also cases where existing indexes written by git versions +before 2.17 will reference directories that don't exist anymore, +potentially causing many "could not open directory" warnings to be +printed on "git status". These are new warnings for existing issues +that were previously silently discarded. + +As with the bug described above the solution is to one-off do a "git +status" run with `core.untrackedCache=false` to flush out the leftover +bad data. + File System Monitor ------------------- @@ -484,8 +510,8 @@ linkgit:git-config[1]) than using the `--fsmonitor` option to `git update-index` in each repository, especially if you want to do so across all repositories you use, because you can set the configuration -variable to `true` (or `false`) in your `$HOME/.gitconfig` just once -and have it affect all repositories you touch. +variable in your `$HOME/.gitconfig` just once and have it affect all +repositories you touch. When the `core.fsmonitor` configuration variable is changed, the file system monitor is added to or removed from the index the next time
diff --git a/git-worktree.html b/git-worktree.html index ba603fd..10695fa 100644 --- a/git-worktree.html +++ b/git-worktree.html
@@ -796,21 +796,18 @@ directory specific files such as HEAD, index, etc. <code>-</code> may also be specified as <code><commit-ish></code>; it is synonymous with <code>@{-1}</code>. </p> -<div class="paragraph"><p>If <commit-ish> is a branch name (call it <code><branch></code> and is not found, +<div class="paragraph"><p>If <commit-ish> is a branch name (call it <code><branch></code>) and is not found, and neither <code>-b</code> nor <code>-B</code> nor <code>--detach</code> are used, but there does exist a tracking branch in exactly one remote (call it <code><remote></code>) -with a matching name, treat as equivalent to</p></div> -</dd> -</dl></div> +with a matching name, treat as equivalent to:</p></div> <div class="listingblock"> <div class="content"> <pre><code>$ git worktree add --track -b <branch> <path> <remote>/<branch></code></pre> </div></div> -<div class="paragraph"><p>+ -If <code><commit-ish></code> is omitted and neither <code>-b</code> nor <code>-B</code> nor <code>--detach</code> used, +<div class="paragraph"><p>If <code><commit-ish></code> is omitted and neither <code>-b</code> nor <code>-B</code> nor <code>--detach</code> used, then, as a convenience, a new branch based at HEAD is created automatically, as if <code>-b $(basename <path>)</code> was specified.</p></div> -<div class="dlist"><dl> +</dd> <dt class="hdlist1"> list </dt> @@ -1145,7 +1142,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/git-worktree.txt b/git-worktree.txt index 41585f5..5ac3f68 100644 --- a/git-worktree.txt +++ b/git-worktree.txt
@@ -52,10 +52,11 @@ directory specific files such as HEAD, index, etc. `-` may also be specified as `<commit-ish>`; it is synonymous with `@{-1}`. + -If <commit-ish> is a branch name (call it `<branch>` and is not found, +If <commit-ish> is a branch name (call it `<branch>`) and is not found, and neither `-b` nor `-B` nor `--detach` are used, but there does exist a tracking branch in exactly one remote (call it `<remote>`) -with a matching name, treat as equivalent to +with a matching name, treat as equivalent to: ++ ------------ $ git worktree add --track -b <branch> <path> <remote>/<branch> ------------
diff --git a/technical/api-submodule-config.html b/technical/api-submodule-config.html index f2fce3d..4a94fc0 100644 --- a/technical/api-submodule-config.html +++ b/technical/api-submodule-config.html
@@ -741,7 +741,7 @@ <div class="paragraph"><p>The submodule config cache API allows to read submodule configurations/information from specified revisions. Internally information is lazily read into a cache that is used to avoid -unnecessary parsing of the same .gitmodule files. Lookups can be done by +unnecessary parsing of the same .gitmodules files. Lookups can be done by submodule path or name.</p></div> </div> </div> @@ -833,7 +833,7 @@ <div id="footer"> <div id="footer-text"> Last updated - 2018-01-26 15:11:04 PST + 2018-02-28 15:39:58 PST </div> </div> </body>
diff --git a/technical/api-submodule-config.txt b/technical/api-submodule-config.txt index 3dce003..ee907c4 100644 --- a/technical/api-submodule-config.txt +++ b/technical/api-submodule-config.txt
@@ -4,7 +4,7 @@ The submodule config cache API allows to read submodule configurations/information from specified revisions. Internally information is lazily read into a cache that is used to avoid -unnecessary parsing of the same .gitmodule files. Lookups can be done by +unnecessary parsing of the same .gitmodules files. Lookups can be done by submodule path or name. Usage